home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / c4 / pro3 / unzsort.inc < prev   
Text File  |  1989-12-12  |  929b  |  35 lines

  1. procedure SortLengths(var tree: sf_tree);
  2.    {Sort the Bit Lengths in ascending order, while retaining the order
  3.     of the original lengths stored in the file}
  4. var
  5.    x:       integer;
  6.    gap:     integer;
  7.    t:       sf_entry;
  8.    noswaps: boolean;
  9.    a,b:     integer;
  10.  
  11. begin
  12.    gap := tree.entries div 2;
  13.  
  14.    repeat
  15.       repeat
  16.          noswaps := true;
  17.          for x := 0 to (tree.entries-1)-gap do
  18.          begin
  19.             a := tree.entry[x].BitLength;
  20.             b := tree.entry[x+gap].BitLength;
  21.             if (a > b) or
  22.                ((a = b) and (tree.entry[x].Value > tree.entry[x+gap].Value)) then
  23.             begin
  24.                t := tree.entry[x];
  25.                tree.entry[x] := tree.entry[x+gap];
  26.                tree.entry[x+gap] := t;
  27.                noswaps := false;
  28.             end;
  29.          end;
  30.       until noswaps;
  31.  
  32.       gap := gap div 2;
  33.    until gap < 1;
  34. end;
  35.